package com.tengju.user.domain.shared;


import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author: Dylan
 * @date: 2021/8/23 9:18 上午
 */
public class HtmlConvertUtil {


    /**
     * 将html转换为纯文本，此方法最后去掉了&nbsp空格，使用时注意
     * @param htmlStr  HTML 代码
     * @return 无格式的纯文本字符串
     */
    public static String delHtmlTag(String htmlStr) {
        //定义script的正则表达式
        String regExScript = "<script[^>]*?>[\\s\\S]*?<\\/script>";
        //定义style的正则表达式
        String regExStyle = "<style[^>]*?>[\\s\\S]*?<\\/style>";
        //定义HTML标签的正则表达式
        String regExHtml = "<[^>]+>";

        Pattern pScript = Pattern.compile(regExScript, Pattern.CASE_INSENSITIVE);
        Matcher mScript = pScript.matcher(htmlStr);
        //过滤script标签
        htmlStr = mScript.replaceAll("");

        Pattern pStyle = Pattern.compile(regExStyle, Pattern.CASE_INSENSITIVE);
        Matcher mStyle = pStyle.matcher(htmlStr);
        //过滤style标签
        htmlStr = mStyle.replaceAll("");

        Pattern pHtml = Pattern.compile(regExHtml, Pattern.CASE_INSENSITIVE);
        Matcher mHtml = pHtml.matcher(htmlStr);
        //过滤html标签
        htmlStr = mHtml.replaceAll("");

        return htmlStr.trim().replaceAll("&nbsp;", "");
    }



    /** 获取图片字符串中所有链接 */
    public static List<String> getImgStr(String htmlStr) {
        List<String> pics = new ArrayList<>();
        String img = "";
        String imgSrc = "src\\s*=\\s*\"?(.*?)(\"|>|\\s+)";
        Pattern pImage;
        Matcher mImage;
        String regExImg = "<(image|img).*src\\s*=\\s*(.*?)[^>]*?>";
        pImage = Pattern.compile(regExImg, Pattern.CASE_INSENSITIVE);
        mImage = pImage.matcher(htmlStr);
        while (mImage.find()) {
            // 得到<img />数据
            img = mImage.group();
            // 匹配<img>中的src数据
            Matcher m = Pattern.compile(imgSrc).matcher(img);
            while (m.find()) {
                pics.add(m.group(1));
            }
        }
        return pics;
    }

    /**
     * 将HTML格式转为文本，图片链接样式展示为【图片】
     * 最大保留长度小于0，则不做截取
     * @param strHtml 解析内容
     * @param maxLength 最大保留长度
     * @return
     */
    public static String delHtmlTagAndDealImgAndVideo(String strHtml,Integer maxLength){
        if (StringUtils.isEmpty(strHtml)) {
            return "";
        }
        String dealImg = strHtml.replaceAll("<(image|img).*src\\s*=\\s*(.*?)[^>]*?>","[图片]");
        String dealVideo = dealImg.replaceAll("<video.*src\\s*=\\s*(.*?)[^>]*?>", "[视频]");
        if (maxLength < 0) {
            return delHtmlTag(dealVideo);
        } else {
            return StringUtils.abbreviate(delHtmlTag(dealVideo),maxLength);
        }
    }

    public static String delHtmlTagAndDealImgAndVideo(String strHtml){
        return delHtmlTagAndDealImgAndVideo(strHtml,-1);
    }



    public static void main(String[] args) {
        System.out.println(delHtmlTagAndDealImgAndVideo("<p><video src=\"\" controls=\"controls\" width=\"100%\" height=\"auto\" allowfullscreen=\"true\" controlslist=\"nodownload\"></video></p>"+"<img src=\"www.baidu.com\">a<p style=\"margin: auto; padding: inherit; font-stretch: normal; line-height: 1.8; font-family: tahoma," +
                " \"microsoft yahei\", 微软雅黑; color: rgb(51, 51, 51); white-space: normal; background-color: rgb(255, 255, 255);\">\n" +
                "<img src=\"http://www.divcss5.com/\" style=\"color: rgb(0, 0, 204);\">CSS</a>文件到<a href=\"http://www.divcss5.com/html/\" " +
                "style=\"color: rgb(0, 0, 204);\">Html</a>方法-<strong>css引入</strong>,<strong>css引用</strong>" +
                "这一点还真羡慕大家。在香港微信支付以及支付宝正在普及，但也仅限于内地旅客常光顾的药妆店，其他地方用现金以及信用卡还是占大多数。在香港，因为有八达通（一种储值卡，需要预先充值，就可以在便利店、地铁站、巴士站“嘟“卡使用），所以比较少用手机微信支付。而商场里的商店餐厅，则通常会鼓励使用信用卡。\n" +
                "\n" +
                "无疑，对于生活在中国大陆的人来说，微信已经成为大家沟通、支付的必要工具。最近在重庆生活了一个月，也深深感受到微信的重要性：打车用微信支付、叫外卖也用微信，到哪里付钱都是用微信支付居多，扫个码就可以了，方便至极。一起看一下跟微信相关的必学英文" +
                "</p>",100));
    }



}
